// utils/toast.ts
import { createVNode, render } from 'vue'
import Toast from '../components/Toast.vue'

// 创建挂载容器
const container = document.createElement('div')
document.body.appendChild(container)

// 存储当前显示的 toast 实例（避免同时显示多个）
let currentToast: { vnode: any } | null = null

// 定义调用参数类型
type ToastOptions = {
  message: string
  type?: 'success' | 'error' | 'info'
  duration?: number
}

// 全局调用函数
const toast = (options: string | ToastOptions) => {
  // 关闭当前显示的 toast
  if (currentToast) {
    render(null, container)
    currentToast = null
  }

  // 处理参数（支持字符串简写）
  const params = typeof options === 'string'
    ? { message: options }
    : options

  // 创建组件实例
  const vnode = createVNode(Toast, {
    ...params,
    onClose: () => {
      render(null, container)
      currentToast = null
    }
  })

  // 挂载组件
  render(vnode, container)
  currentToast = { vnode }
}

// 扩展快捷方法（可选）
toast.success = (message: string, duration?: number) => {
  toast({ message, type: 'success', duration })
}
toast.error = (message: string, duration?: number) => {
  toast({ message, type: 'error', duration })
}

export default toast
